﻿#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <locale.h>
#include <stdbool.h>
#define WALL L'□'
#define BODY L'●'
#define FOOD L'○'
#define POS_X 24
#define POS_Y 5
//蛇的方向
enum DIRECTION{
	UP=1,
	DOWN,
	LEFT,
	RIGHT
};
//蛇的状态
enum GAME_STATUS
{
	OK,//正常
	KILL_BY_WALL,//撞墙
	KILL_BY_SELF,//撞到自己
	END_NORMAL //正常退出
};
//创建蛇的节点
typedef struct SnakeNode
{
	//坐标
	int x;
	int y;
	//指向下一个结点的指针
	struct SnakeNode* next;
}SnakeNode,*pSnakeNode;
//蛇身属性
typedef struct Snake
{
	pSnakeNode _pSnake;//指向蛇头的指针
	pSnakeNode _pFood;//指向食物结点的指针
	enum DIRECTION _dir;//蛇的方向
	enum GAME_STATUS _status;//蛇的状态
	int _food_weight;//一个食物的分数
	int _score;//总成绩
	int _sleep_time;//休息时间，时间越短，速度越快，时间越长，速度越慢

}Snake,*pSnake;
//函数声明



// 定义光标位置
void SetPos(short x, short y);

//游戏的初始化
void GameStart(pSnake ps);

//欢迎界面的打印
void WelcomeToGame();

//创建地图
void CreatMap();

//初始化蛇身
void InitSnake(pSnake ps);

//创建食物
void CreatFood(pSnake ps);



//游戏的运行逻辑

void GameRun(pSnake ps, int* temp);

//蛇走一步
void SnakeMove(pSnake ps);

//判断是否为食物
int NextisFood(pSnakeNode NextNode, pSnake ps);

//下一个结点是食物，吃掉食物
void EatFood(pSnakeNode pn, pSnake ps);

//下一个结点不是食物
void NoFood(pSnakeNode pn, pSnake ps);

//检测是否撞墙
void killbywall(pSnake ps);

//检测是否撞到自己
void killbyself(pSnake ps);



//结束游戏-善后工作
void GameEnd(pSnake ps);